// Main.h

// Kontrolny (hlavny) modul

#ifndef MAIN_H
#define MAIN_H

#include "Common/Interfaces/Control.h"
#include "Common/Module.h"

#include "Evaluating/EvaluatingPanesMap.h"
#include "Evaluating/EvaluatingPlayerList.h"


// Deklaracia jednosmerne zretazeneho zoznamu modulov
struct MODULE_ELEM;

// Kontrolny modul
class Main : public Module, public ControlInterface
{
	// Jednosmerne zretazeny zoznam modulov
	MODULE_ELEM* moduleList;
	// Flag, ci bezi kontrolny modul
	bool run;
	// Staticky pointer na kontrolny modul
	static Main* instance;

public:
	// Deklaracia konstruktora
	Main();
	// Deklaracia destruktora
	virtual ~Main();

	//METODY

	/// Vrati pointer na tento kontrolny modul
	static Main* GetInstance()
	{ 
		return instance;
	}
	// Vrati pointer na interfejs pre danu ulohu
	virtual Interface* GetInterface(int nTask) const;
	// Vrati pointer na modul pre danu ulohu
	virtual Module* GetModule(int nTask) const;
	// Inicializovanie tohto modulu
	virtual int Init(int argc, char** argv, int nTask = -1);
	// Spustenie tohto modulu
	virtual void Run(int nTask = -1);
	/// Zastavenie tohto modulu
	virtual void ShutDown()
	{ 
		run = false;
	}
	// Zaregistruje novy modul
	virtual int RegisterModule(Module* module, int nTask, int nPriority = LOW_PRIORITY);
};

#endif // MAIN_H
